package _49_字符串转整数;

/**
 * 题目描述
 * 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能，但是string不符合数字要求时返回0)，
 * 要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
 * 输入描述:
 * 输入一个字符串,包括数字字母符号,可以为空
 * 输出描述:
 * 如果是合法的数值表达则返回该数字，否则返回0
 * 示例1
 * 输入
 * 复制
 * +2147483647
 * 1a33
 * 输出
 * 复制
 * 2147483647
 * 0
 */
public class Solution {
    public int StrToInt(String str) {

        int fuhao = 1;
        char c = str.charAt(0);
        if (c == '-') {
            fuhao = -1;

        }
        int res = 0;
        for (int i = ((c == '-' || c == '+') ? 1 : 0); i < str.length(); i++) {
            char tmp = str.charAt(i);
            if (!(tmp >= '0' && tmp <= '9')) {
                return 0;
            }
            int num = (tmp - '0');
            if (res > Integer.MAX_VALUE / 10) {
                return 0;
            }
            res = res * 10;
            if(fuhao==-1&&res ==Integer.MAX_VALUE-num+1) {
                return Integer.MIN_VALUE;
            }
            if (res > Integer.MAX_VALUE - num) {
                return 0;
            }
            res = res + num;

        }
        return res * fuhao;


    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.StrToInt("-2147483649"));
        // System.out.println(Integer.MAX_VALUE + 1);
    }

}